curl_easy_setopt (req->easy, CURLOPT_SSLKEY, self->tls_client_key_path);
}
+ if ((self->config_flags & OSTREE_FETCHER_FLAGS_TRANSFER_GZIP) > 0)
+ curl_easy_setopt (req->easy, CURLOPT_ACCEPT_ENCODING, "");
+
/* We should only speak HTTP; TODO: only enable file if specified */
curl_easy_setopt (req->easy, CURLOPT_PROTOCOLS, (long)(CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FILE));
/* Picked the current version in F25 as of 20170127, since
GVariant *extra_headers;
int max_outstanding;
+ gboolean transfer_gzip;
/* Our active HTTP requests */
GHashTable *outstanding;
SOUP_SESSION_IDLE_TIMEOUT, 60,
NULL);
+ if (closure->transfer_gzip)
+ soup_session_add_feature_by_type (closure->session, SOUP_TYPE_CONTENT_DECODER);
+
/* XXX: Now that we have mirrorlist support, we could make this even smarter
* by spreading requests across mirrors. */
g_object_get (closure->session, "max-conns-per-host", &max_conns, NULL);
self->thread_closure->ref_count = 1;
self->thread_closure->main_context = g_main_context_ref (main_context);
self->thread_closure->running = 1;
+ self->thread_closure->transfer_gzip = (self->config_flags & OSTREE_FETCHER_FLAGS_TRANSFER_GZIP) != 0;
self->thread_closure->tmpdir_dfd = -1;
self->thread_closure->tmpdir_lock = empty_lockfile;
typedef enum {
OSTREE_FETCHER_FLAGS_NONE = 0,
- OSTREE_FETCHER_FLAGS_TLS_PERMISSIVE = (1 << 0)
+ OSTREE_FETCHER_FLAGS_TLS_PERMISSIVE = (1 << 0),
+ OSTREE_FETCHER_FLAGS_TRANSFER_GZIP = (1 << 1)
} OstreeFetcherConfigFlags;
void
static OstreeFetcher *
_ostree_repo_remote_new_fetcher (OstreeRepo *self,
const char *remote_name,
+ gboolean gzip,
GError **error)
{
OstreeFetcher *fetcher = NULL;
if (tls_permissive)
fetcher_flags |= OSTREE_FETCHER_FLAGS_TLS_PERMISSIVE;
+ if (gzip)
+ fetcher_flags |= OSTREE_FETCHER_FLAGS_TRANSFER_GZIP;
+
fetcher = _ostree_fetcher_new (self->tmp_dir_fd, remote_name, fetcher_flags);
{
mainctx = g_main_context_new ();
g_main_context_push_thread_default (mainctx);
- fetcher = _ostree_repo_remote_new_fetcher (self, name, error);
+ fetcher = _ostree_repo_remote_new_fetcher (self, name, TRUE, error);
if (fetcher == NULL)
goto out;
reinitialize_fetcher (OtPullData *pull_data, const char *remote_name, GError **error)
{
g_clear_object (&pull_data->fetcher);
- pull_data->fetcher = _ostree_repo_remote_new_fetcher (pull_data->repo, remote_name, error);
+ pull_data->fetcher = _ostree_repo_remote_new_fetcher (pull_data->repo, remote_name, FALSE, error);
if (pull_data->fetcher == NULL)
return FALSE;